package sword_offer;

import java.util.ArrayList;

/**
 * @author Synhard
 * @version 1.0
 * @Class sword_offer.Code33
 * @Description
 * 从上到下打印出二叉树的每个节点，同一层的节点按照从左到右的顺序打印。
 * @tel 13001321080
 * @email 823436512@qq.com
 * @date 2021-03-19 16:45
 */
public class Code33 {
    public int[] levelOrder(TreeNode root) {
        if (root == null) {
            return new int[] {}; // 如果根为空的话返回空数组
        }

        ArrayList<Integer> res = new ArrayList<>(); // 将结果存在arrayList中
        TempQueue<TreeNode> tempQueue = new TempQueue<>(); // 辅助队列
        tempQueue.push(root); // 首先根节点入队
        while (tempQueue.getLength() != 0) {
            if (tempQueue.getTop().left != null) {
                tempQueue.push(tempQueue.getTop().left);
            }
            if (tempQueue.getTop().right != null) {
                tempQueue.push(tempQueue.getTop().right);
            }
            res.add(tempQueue.pop().val);
        }
        int[] arr = new int[res.size()];
        for (int i = 0; i < res.size(); i++) {
            arr[i] = res.get(i);
        }
        return arr;
    }
}
